/*************************************************************************
                           Vector2D  -  description
                             -------------------
    début                : 21 févr. 2012
    copyright            : (C) 2012 par francois
*************************************************************************/

//---------- Interface de la classe <Vector2D> (fichier Vector2D.h) ------
#if ! defined ( VECTOR2D_H_ )
#define VECTOR2D_H_

//--------------------------------------------------- Interfaces utilisées
#include "Point2D.h"

namespace livgeo {

//------------------------------------------------------------- Constantes 

//------------------------------------------------------------------ Types 



//------------------------------------------------------------------------ 
// Rôle de la classe <Vector2D>
//
//
//------------------------------------------------------------------------ 
class Point2D;
class Vector2D
{
//----------------------------------------------------------------- PUBLIC

public:
//----------------------------------------------------- Méthodes publiques

	float getX() const { return x; }

	float getY() const { return y; }

	void setX(float x) { this->x = x; }

	void setY(float y) { this->y = y; }

	float norm1() const;

	float norm2() const;

	static float dot(const Vector2D& v1, const Vector2D& v2);

	static float perp(const Vector2D& v1, const Vector2D& v2);

	static float angleBetween(const Vector2D& v1, const Vector2D& v2);

	Vector2D rotate(const Point2D& origin, float angle);

//------------------------------------------------- Surcharge d'opérateurs
	Point2D operator+(const Point2D& p) const;

	Vector2D& operator+=(const Vector2D& v);

	Vector2D& operator-=(const Vector2D& v);

	Vector2D operator+(const Vector2D& v) const;

	Vector2D operator-(const Vector2D& v) const;

//-------------------------------------------- Constructeurs - destructeur
    Vector2D ( const Point2D & unPoint2D );
    // Constructeur: Crée un vecteur à partir d'un Point

    Vector2D (float x, float y);
    // Contructeur: crée un vecteur de coordonnées ( <x> , <y> )

    Vector2D ( );
    // Constructeur par défaut: Crée le vecteur (0, 0)

    virtual ~Vector2D ( );
    // Destructeur

//------------------------------------------------------------------ PRIVE 

protected:
//----------------------------------------------------- Méthodes protégées

//----------------------------------------------------- Attributs protégés
    float x;
    float y;
};

//--------------------------- Autres définitions dépendantes de <Vector2D>

}; // ------ fin de livgeo

#endif // VECTOR2D_H_
